package com.example.springboot.druid.conf;

import com.github.pagehelper.PageHelper;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.util.Properties;


/**
 * @desc Mybatis加载配置文件及初始化dao层mapper接口类，可以通过在配置文件中增加mybatis配置，也可以使用以下代码初始化，
 * 不建议使用该中方式，在项目维护中不方便；项目中常用在配置文件中添加mybatis配置，让spring自动管理。
 * @Author wangsh
 * @date 2018/5/6 12:12
 * @return
 */
//通过Configuration注解加载到spring容器，如需要手动注入，则打开@Configuration注解
//@Configuration
public class MyBatisConfiguration {

	@Bean
	@ConditionalOnMissingBean // 当容器里没有指定的 Bean 的情况下创建该对象
	public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		// 设置数据源
		sqlSessionFactoryBean.setDataSource(dataSource);
		// 设置mybatis的主配置文件
		sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml"));
		// 设置mapper映射文件
		PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//		Resource[] mapperXml;
//		try {
//			mapperXml = resolver.getResources("classpath:mybatis/mapper/*.xml");
//			sqlSessionFactoryBean.setMapperLocations(mapperXml);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		// 设置别名包
//		sqlSessionFactoryBean.setTypeAliasesPackage("com.example.springboot.druid.entity");

		return sqlSessionFactoryBean;
	}

	/**
	 * @desc 可以通过代码注入dao层mapper接口，也可以通过配置文件加载，自动注入
	 * @Author wangsh
	 * @date 2018/5/6 11:59
	 * @return
	 */
	// 当 SqlSessionFactoryBean 实例存在时创建对象
//	@Bean
//	@ConditionalOnBean(SqlSessionFactoryBean.class)
//	public MapperScannerConfigurer mapperScannerConfigurer() {
//		MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//		mapperScannerConfigurer.setBasePackage("com.example.springboot.druid.dao");
//		return mapperScannerConfigurer;
//	}

	/**
	 * @return
	 * @desc 分页处理类
	 * @Author wangsh
	 * @date 2018/5/6 11:58
	 */
	@Bean
	public PageHelper pageHelper() {
		PageHelper page = new PageHelper();
		Properties p = new Properties();
		p.setProperty("offsetAsPageNum", "true");
		p.setProperty("rowBoundsWithCount", "true");
		p.setProperty("reasonable", "true");
		page.setProperties(p);
		return page;
	}
}
